#include "iwdg.h"


/************************************************************************
*函数名：IWDG_Start
*函数功能：启动IWDG
*函数参数：无
*函数返回值：无
*函数说明：
*************************************************************************/
void IWDG_Start(void)
{
	IWDG->KR = 0xCCCC;
}

/************************************************************************
*函数名：IWDG_Feed
*函数功能：IWDG喂狗
*函数参数：无
*函数返回值：无
*函数说明：
*************************************************************************/
void IWDG_Feed(void)
{
	IWDG->KR = 0xAAAA;
}

/************************************************************************
*函数名：IWDG_Unlock
*函数功能：IWDG解除PR和RLR的写保护
*函数参数：无
*函数返回值：无
*函数说明：
*************************************************************************/
void IWDG_Unlock(void)
{
	IWDG->KR = 0x5555;
}

/************************************************************************
*函数名：IWDG_SetPR
*函数功能：设置IWDG分频
*函数参数：u8 mode，分频值编码，取值范围0~7
*函数返回值：无
*函数说明：
*				0——4分频
*				1——8分频
*				2——16分频
*				3——32分频
*				4——64分频
*				5——128分频
*				6——256分频
*				7——256分频
*************************************************************************/
void IWDG_SetPR(PSC_enum mode)
{
	while(IWDG->SR & (1<<0));//等待预分频器值更新完成
	IWDG->PR = mode;
}

/************************************************************************
*函数名：IWDG_SetRLR
*函数功能：设置IWDG重载值
*函数参数：u16 reload，重载值，取值范围0~4095
*函数返回值：无
*函数说明：RLR寄存器12位
*************************************************************************/
void IWDG_SetRLR(u16 reload)
{
	while(IWDG->SR & (1<<1));//等待重载值更新完成
	IWDG->RLR = reload;
}

/************************************************************************
*函数名：IWDG_Init
*函数功能：IWDG初始化配置函数
*函数参数：无
*函数返回值：无
*函数说明：
*				LSI时钟：32Khz
*				重载值4096，分频4（512ms更新一次）
*************************************************************************/
void IWDG_Init(void)
{
	IWDG_Unlock();
	IWDG_SetPR(PSC4);
	IWDG_SetRLR(0xFFF);
	IWDG_Start();
}

